<?php

/**
 * Framework
 * 
 * Компонента Framework_Session является "оберткой" к расширению ext/session c интерфейсом
 * для администрирования и управления
 *  
 * @category   Framework
 * @package    Framework_Session
 */

class Framework_Session
{
    /**
     * Framework_Session object
     * 
     * @var Framework_Session
     */
    private static $_session = null;
    
    /**
     * Возвращает инстанцинированный объект Framework_Session
     *
     * @return Framework_Session
     */
    public static function getInstance()
    {
        if (self::$_session === null) {
            self::$_session = new self();
        }

        return self::$_session;
    }
    
    /**
     * Framework_Session
     *
     */
    private function __construct()
    {
        session_start();
    }
    
    /**
     * return session_id()
     *
     * @return string
     */
    public static function getId()
    {
        return session_id();
    }
    
    /**
     * return session_name()
     *
     * @return string
     */
    public static function getName()
    {
        return session_name();
    }
    
    /**
     * Уничтожает сессию
     *
     * @return void
     */
    public static function destroy($remove_cookie = true)
    {
        $_SESSION = array();
        session_destroy();
        
        if ($remove_cookie) {
             if (isset($_COOKIE[session_name()])) {
                $cookie_params = session_get_cookie_params();
                setcookie(
                    session_name(),
                    false,
                    315554400, // strtotime('1980-01-01'),
                    $cookie_params['path'],
                    $cookie_params['domain'],
                    $cookie_params['secure']
                    );
            }
        }
    }
    
    /**
     * Устанавливает значение в $_SESSION
     *
     * @return void
     */
    public function set($index, $value)
    {
        $_SESSION[$index] = $value;
    }
    
    /**
     * Берет значение из $_SESSION, если его не существует
     * возвращает значение по умолчанию
     *
     * @return void
     */
    public function get($index, $default = '')
    {
        $result = $default;
        if (array_key_exists($index, $_SESSION)) {
            $result = $_SESSION[$index];
        }
        return $result;
    }
    
    public function offsetExists($index)
    {
        return array_key_exists($index, $_SESSION);
    }
}
